package main

import "fmt"

func main() {
	//定义数组的时候指定长度，用默认值初始化
	var arr1 = [2]int{}

	//定义数组的是指定长度，并且制定初始值
	arr2 := [2]int{1, 2}

	//定义数组不指定长度，按角标定义初始值
	arr3 := [...]int{1: 2}

	//不指定长度，按角标和按顺序混合定义初始值
	arr4 := [...]int{0: 1, 2: 1, 4: 1, 3}

	fmt.Println(arr1, arr2, arr3, arr4)

	//数组在赋值的时候是值传递，所以两个数组的地址不一样
	arr4v2 := arr4
	fmt.Printf("%p\n", &arr4v2)
	fmt.Printf("%p\n", &arr4)

	arr4p := &arr4
	//数组的指针也可以像数组一样迭代
	for _, v := range arr4p {
		fmt.Printf("%v,", v)
	}
	fmt.Println()

	//其中times对应一个[5][0]int类型的数组，
	//虽然第一维数组有长度，但是数组的元素[0]int大小是0，
	//因此整个数组占用的内存大小依然是0。不用付出额外的内存代价，
	//我们就通过for range方式实现times次快速迭代。
	var times [5][0]int
	for range times {
		fmt.Printf("-, ")
	}

}
